package com.skyline.search.index;

import java.io.IOException;
import java.rmi.Remote;
import org.apache.lucene.document.Document;
import com.skyline.search.config.Config;

/**
 * Class <code>IndexProxy</code> IndexProx为索引代理，通过IndexProxy可以选择相应的Indexer进行操作
 * 
 * @author Jairus Chan
 * @version 0.1, 11/30/10
 * @since JDK1.6
 */

public interface IndexProxy extends Remote {

	/**
	 * inital() 通过Config中的参数对所有indexer进行初始化
	 * 
	 * @param config
	 *            初始化参数
	 * @return
	 */
	public void inital(Config config) throws IOException,
			java.rmi.RemoteException;

	/**
	 * getIndexer(String index) 获取相应的Indexer
	 * 
	 * @param index
	 *            所需的Indexer的名称
	 * @return
	 * @exception IOException
	 * @exception java.rmi.RemoteException
	 */
	public Indexer getIndexer(String index) throws IOException,
			java.rmi.RemoteException;

	/**
	 * createIndex(Document d, String index) 对相应的Indexer创建索引 在此过程中，会调用相应Indexer
	 * 
	 * @param d
	 *            索引最初的文档
	 * @param index
	 *            所需创建索引的indexer
	 * @return
	 * @exception java.rmi.RemoteException
	 */
	public void createIndex(Document d, String index)
			throws java.rmi.RemoteException;

	/**
	 * createIndex(Document d, String index) 对相应的Indexer创建索引 在此过程中，会调用相应Indexer
	 * 
	 * @param d
	 *            索引最初的文档
	 * @param index
	 *            所需创建索引的indexer
	 * @return
	 * @exception java.rmi.RemoteException
	 */
	public void addDocument(Document d, String index)
			throws java.rmi.RemoteException;

	/**
	 * deleteDocument(int docID, String index) 对相应的Indexer删除文档
	 * 
	 * @param docID
	 *            所需删除的文档的docID
	 * @param index
	 *            所需操作的indexer
	 * @return
	 * @exception java.rmi.RemoteException
	 */
	public void deleteDocument(int docID, String index)
			throws java.rmi.RemoteException;

	/**
	 * deleteDocuments(String key, String value, String index) 对相应的Indexer删除文档
	 * 
	 * @param keyvalue
	 *            删除key为value的文档
	 * @param index
	 *            所需操作的indexer
	 * @return
	 * @exception java.rmi.RemoteException
	 */
	public void deleteDocuments(String key, String value, String index)
			throws java.rmi.RemoteException;

	/**
	 * modifyDocument(Document doc, String index) 对相应的Indexer修改文档
	 * 
	 * @param doc
	 *            所需修改的文档
	 * @param index
	 *            所需操作的indexer
	 * @return
	 * @exception java.rmi.RemoteException
	 */
	public void modifyDocument(Document doc, String index)
			throws java.rmi.RemoteException;

	/**
	 * optimize(String index) 对相应的Indexer修改文档
	 * 
	 * @param
	 * @param index
	 *            所需操作的indexer
	 * @return
	 * @exception java.rmi.RemoteException
	 */
	public void optimize(String index) throws java.rmi.RemoteException;
}
